package com.example.design_pattern.memento.in;

/**
 * 发起者，有状态需要保存到备忘录对象中
 * 该类的内部会有备忘录内部类
 * 只有发起者能访问备忘录内部的方法
 */
public class OriginatorIn {

    private String state1;

    /**
     * 创建备忘录对象，注意返回的是标识接口
     */
    public MementoInterface createMemento(){
        MementoIn mementoIn = new MementoIn();
        mementoIn.setState(state1);
        return mementoIn;
    }

    /**
     * 从备忘录对象中恢复状态
     */
    public void restore(MementoInterface mementoInterface){
        MementoIn mementoIn = (MementoIn) mementoInterface;
        this.state1 = mementoIn.getState();
    }

    public String getState1() {
        return state1;
    }

    public void setState1(String state1) {
        this.state1 = state1;
    }

    /**
     * 备忘录内部类，发起者对象可以访问内部类的方法，而外部的其他对象无法访问内部类的方法
     * 内部的所有方法都需要设置成私有的
     */
    class MementoIn implements MementoInterface{

        private String state;

        private String getState() {
            return state;
        }

        private void setState(String state) {
            this.state = state;
        }
    }

}
